// 版权所有2009 Go作者。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:build aix | | | | | | | | | | | | | | darwin&！ios | | |蜻蜓| | freebsd | | | | | | | | | | | 124。

// 这是在OS X、Linux、BSD、Sun和其他系统上使用的一种相当标准的文件格式。
// 参见tzfile（5），https:
// 和ftp:

package time

import (
	"runtime"
	"syscall"
)

var zoneSources = []string{
	"/usr/share/zoneinfo/",
	"/usr/share/lib/zoneinfo/",
	"/usr/lib/locale/TZ/",
	runtime.GOROOT() + "/lib/time/zoneinfo.zip",
}

func initLocal() {
	// 请咨询$TZ以找到要使用的时区。
	// no$TZ表示使用系统默认值/etc/localtime。
	// /$TZ=”“表示使用UTC。
	// /$TZ=“foo”或$TZ=“：foo”如果foo是绝对路径，那么foo指向的文件
	// 将用于初始化时区；否则，将使用
	// /usr/share/zoneinfo/foo文件。

	tz, ok := syscall.Getenv("TZ")
	switch {
	case !ok:
		z, err := loadLocation("localtime", []string{"/etc"})
		if err == nil {
			localLoc = *z
			localLoc.name = "Local"
			return
		}
	case tz != "":
		if tz[0] == ':' {
			tz = tz[1:]
		}
		if tz != "" && tz[0] == '/' {
			if z, err := loadLocation(tz, []string{""}); err == nil {
				localLoc = *z
				if tz == "/etc/localtime" {
					localLoc.name = "Local"
				} else {
					localLoc.name = tz
				}
				return
			}
		} else if tz != "" && tz != "UTC" {
			if z, err := loadLocation(tz, zoneSources); err == nil {
				localLoc = *z
				return
			}
		}
	}

	// 返回UTC。
	localLoc.name = "UTC"
}
